import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { Reflector } from '@nestjs/core';
import { Response } from 'express';

/**
 * @description 自定义拦截器，用于控制 HTTP 响应的缓存行为。
 * @implements {NestInterceptor}
 */
@Injectable()
export class Interceptor_NoCache_Base implements NestInterceptor {
  constructor(private reflector: Reflector) {}

  /**
   * 拦截器方法，用于在处理请求之前修改响应头，禁用缓存。
   * @param {ExecutionContext} context - 执行上下文。
   * @param {CallHandler} next - 调用处理器。
   * @returns {Observable<any>} - 返回一个 Observable 对象。
   */
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    const allowCache = this.reflector.get<boolean>('allowCache', context.getHandler());
    if (!allowCache) {
      const httpContext = context.switchToHttp();
      const response = httpContext.getResponse<Response>();
      response.set('Cache-Control', 'no-cache, no-store, must-revalidate');
    }
    return next.handle();
  }
}
